package com.example.base_model.general

import javax.inject.Inject
import javax.inject.Singleton

/**
 * @Author jiangKunKun
 * @CreateDate 2025/7/28
 * @Description 全局状态管理器，作为一个单例，在整个应用程序的生命周期内持有和管理共享的状态。
 * 使用 Hilt 的 `@Singleton` 来确保只有一个实例。
 * @SpittingGrooves
 */
@Singleton // 1. 使用 @Singleton 注解，Hilt 会确保这个类在 ApplicationComponent 中只有一个实例。
class GlobalStateManager @Inject constructor() { // 2. @Inject constructor() 告诉 Hilt 如何创建这个类的实例。

    /**
     * 应用程序的全局标题。
     * 使用 [StateChangeManager.of] 创建一个可观察的状态持有者。
     * UI 组件可以订阅此状态，并在其值发生变化时自动更新。
     * 初始值为 null。
     *
     * **用法示例 (在 ViewModel 中):**
     * ```
     * globalStateManager.appTitle.watch(this) { newTitle ->
     *     _appBarTitle.value = newTitle
     * }
     * ```
     */
    val appTitle = StateChangeManager.of<String?>(null)

    // TODO: 在这里可以添加更多的全局状态。
    // 例如:
    // val currentUser = StateChangeManager.of<User?>(null) // 当前登录的用户信息
    // val networkStatus = StateChangeManager.of<NetworkState>(NetworkState.AVAILABLE) // 网络连接状态
}
